﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.Mvc;
using SIIV.Data;
using SIIV.Business.Exceptions;

namespace SIIV.View.Web.Controllers
{
    public class AdministracionController : BaseController
    {
        [Authorize(Roles = "Veterinario")]
        [ActionName("Animales")]
        public ActionResult ObtenerAnimales()
        {
            try
            {
                using (SIIVDataModel model = new SIIVDataModel())
                {
                    List<Animal> animales = Animales.ObtenerAnimales(VeterinarioLogueado.IdUsuario, string.Empty, new Nullable<decimal>(), new Nullable<decimal>(), new Nullable<char>(), new Nullable<short>());
                    ViewBag.AnimalesPadre = new SelectList(animales, "IdAnimal", "Nombre");
                    if (AjaxRequestExtensions.IsAjaxRequest(Request))
                    {
                        return PartialView("AnimalesGrid", animales);
                    }
                    else
                    {
                        ViewBag.Campos = new SelectList(Campos.ObtenerCampos(VeterinarioLogueado.IdUsuario), "IdCampo", "Nombre");
                        ViewBag.TiposDeAnimales = new SelectList(Animales.ObtenerTiposDeAnimales(), "IdTipoDeAnimal", "Nombre");                        
                        ViewBag.EstadosDeAnimal = new SelectList(Animales.ObtenerEstados(), "IdEstadoDeAnimal", "Nombre");
                        return View(animales);
                    }
                }
            }
            catch (Exception ex)
            {
                ViewBag.Excepcion = ex;
                return View("Error");
            }
        }

        [Authorize(Roles="Veterinario")]
        [ActionName("Productores")]
        public ActionResult ObtenerProductores()
        {
            try
            {
                using (SIIVDataModel model = new SIIVDataModel())
                {
                    List<Productor> productores = Productores.ObtenerProductores(VeterinarioLogueado.IdUsuario);
                    if (AjaxRequestExtensions.IsAjaxRequest(Request))
                    {
                        return PartialView("ProductoresGrid", productores);
                    }
                    else
                    {                        
                        return View(productores);
                    }
                }
            }
            catch (Exception ex)
            {
                ViewBag.Excepcion = ex;
                return View("Error");
            }
        }

        [Authorize(Roles = "Veterinario")]
        [ActionName("Campos")]
        public ActionResult ObtenerCampos()
        {
            try
            {
                using (SIIVDataModel model = new SIIVDataModel())
                {
                    List<Campo> campos = Campos.ObtenerCampos(VeterinarioLogueado.IdUsuario);
                    if (AjaxRequestExtensions.IsAjaxRequest(Request))
                    {
                        return PartialView("CamposGrid", campos);
                    }
                    else
                    {
                        ViewBag.Productores = new SelectList(Productores.ObtenerProductores(VeterinarioLogueado.IdUsuario), "IdProductor", "Nombre");
                        return View(campos);
                    }
                }
            }
            catch (Exception ex)
            {
                ViewBag.Excepcion = ex;
                return View("Error");
            }
        }

        [HttpPost]
        public ActionResult AgregarProductor(string nombre)
        {
            try
            {
                Productores.AgregarProductor(nombre, VeterinarioLogueado.IdUsuario);
                return Json("El nuevo productor fue dado de alta.");
            }
            catch (FunctionalException ex)
            {
                return Json(ex.Message);
            }
            catch (Exception ex)
            {
                ViewBag.Excepcion = ex;
                return View("Error");
            }
        }

        [HttpPost]
        public ActionResult AgregarCampo(string nombre, string descripcion, int idProductor, string region, string ubicacion)
        {
            try
            {
                Campos.AgregarCampo(VeterinarioLogueado.IdUsuario, idProductor, nombre, descripcion, ubicacion, region);
                return Json("El nuevo campo fue dado de alta.");
            }
            catch (FunctionalException ex)
            {
                return Json(ex.Message);
            }
            catch (Exception ex)
            {
                ViewBag.Excepcion = ex;
                return View("Error");
            }
        }

        [HttpPost]
        public ActionResult ActualizarProductor(int idProductor, string nombre)
        {
            try
            {
                Productores.ActualizarProductor(idProductor, nombre);
                return Json("Productor actualizado.");
            }
            catch (Exception ex)
            {
                ViewBag.Excepcion = ex;
                return View("Error");
            }
        }

        [HttpPost]
        public ActionResult ActualizarCampo(int idCampo, string nombre, string descripcion, int idProductor, string region, string ubicacion)
        {
            try
            {
                Campos.ActualizarCampo(idCampo, idProductor, nombre, descripcion, ubicacion, region);
                return Json("Campo actualizado.");
            }
            catch (FunctionalException ex)
            {
                return Json(ex.Message);
            }
            catch (Exception ex)
            {
                ViewBag.Excepcion = ex;
                return View("Error");
            }
        }

        [HttpPost]
        public ActionResult ActualizarAnimal(int idAnimal, string nombre, decimal peso, int? idAnimalPadre, char sexo, short idTipoAnimal, DateTime fechaNacimiento, short idEstado, int? idCampo)
        {
            try
            {
                Animales.ActualizarAnimal(idAnimal, nombre, peso, idAnimalPadre, sexo, idTipoAnimal, fechaNacimiento, idEstado, idCampo);
                return Json("Animal actualizado.");
            }
            catch (FunctionalException ex)
            {
                return Json(ex.Message);
            }
            catch (Exception ex)
            {
                ViewBag.Excepcion = ex;
                return View("Error");
            }
        }

        [HttpPost]
        public ActionResult EliminarProductor(int idProductor)
        {
            try
            {
                Productores.EliminarProductor(idProductor);
                return Json("Productor eliminado.");
            }
            catch (Exception ex)
            {
                ViewBag.Excepcion = ex;
                return View("Error");
            }
        }

        [HttpPost]
        public ActionResult EliminarCampo(int idCampo)
        {
            try
            {
                Campos.EliminarCampo(idCampo);
                return Json("Campo eliminado.");
            }
            catch (Exception ex)
            {
                ViewBag.Excepcion = ex;
                return View("Error");
            }
        }

        [HttpPost]
        public ActionResult EliminarAnimal(int idAnimal)
        {
            try
            {
                Animales.EliminarAnimal(idAnimal);
                return Json("Animal eliminado.");
            }
            catch (Exception ex)
            {
                ViewBag.Excepcion = ex;
                return View("Error");
            }
        }
    }
}
